#ifndef __E32_433T33S_H__
#define __E32_433T33S_H__

#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"


typedef enum {
    E32_MODE_NORMAL = 0, // 一般模式 M0,M1=01
    E32_MODE_WOR_1 = 1, // 发送模式 M0,M1=10
    E32_MODE_WOR_2 = 2, // 接收模式 M0,M1=01
    E32_MODE_SLEEP = 3, // 睡眠模式 M0,M1=11
} e32_mode_t;
    
//645采集硬件层初始化
typedef struct e32_port_config{
	uint8_t uart_num;
	int baud_rate;
	int tx_io_num;
	int rx_io_num;
    int aux_io_num;
    int mode_io_num;
}e32_port_config_t;


typedef struct e32_params{
    uint16_t addr;
    uint8_t speed;
    uint8_t channel;
    uint8_t option;
}e32_params_t;


typedef struct e32_version{
    uint8_t model;
    uint8_t version;
    uint8_t interface;
}e32_version_t;

//DLT645 环境结构体
typedef struct e32_433t33s
{
    uint8_t uart_num;   //串口
    int aux_io_num;
    int mode_io_num;

    e32_mode_t mode;
    e32_params_t params;
    e32_version_t version;
    bool aux_status;

    QueueHandle_t uart_queue;
    char *rx_buf;
    int (*recv_handle)(void *handle, const char *data, int size);
    void *port_data;                                            //移植层拓展接口
} e32_struct_t;

typedef e32_struct_t *e32_handle_t;

int e32_port_create(e32_port_config_t *cfg, e32_handle_t *out_handle);
int e32_port_destroy(e32_handle_t *handle);

int e32_port_write(e32_struct_t *ctx, uint8_t *buf, uint16_t len);
int e32_port_read(e32_struct_t *ctx, uint8_t *buf, uint16_t len);

int e32_uart_event_task(e32_handle_t handle, int timeout);

void e32_set_aux_status(e32_handle_t handle, bool status);
bool e32_get_aux_status(e32_handle_t handle);
// void e32_gpio_mode_config(int mode_io_num);
int e32_set_mode(e32_handle_t handle, e32_mode_t mode);

int e32_set_params(e32_handle_t handle, e32_params_t *params);
int e32_get_params(e32_struct_t *dlt645, e32_params_t *params);
int e32_get_version(e32_handle_t handle, e32_version_t *version);

#endif // __E32_433T33S_H__
